更新:使用回溯法求解迷宫问题(获取最优路径)
原文章使用方法过于愚蠢,请忽略
说明 N 代表迷宫,A代表方位暂存器,V代表对应的N点是否被访问,AS代表方位存储器,Step代表下一步的操作。
#include<iostream>
using namespace std;
int N[10001][10001];
int A[10001][2];
int V[10001][10001];
int AS[10001][2];
int Step[4][2] = {
{0,1},{0,-1},{1,0},{-1,0}};
int n;
int MinStep = 100000;
void Search(int s){
for(int i=0;i<4;i++){
int x = A[s-1][0]+Step[i][0];
int y = A[s-1][1]+Step[i][1];
if(x>=1 && x<=n && y>=1 && y<=n && V[x][y] != 1 && N[x][y] != 1 && s<MinStep){
V[x][y] = 1;
A[s][0] = x;
A[s][1] = y;
if(A[s][0] == n && A[s][1] == n){
if(s<MinStep){
for(int j=1;j<=s;j++){
AS[j][0] = A[j][0];
AS[j][1] = A[j][1];
}
MinStep = s;
}
}else{
Search(s+1);
}
V[x][y] = 0;
}
}
}
int main(){
A[1][0] = A[1][1] = 1;
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>N[i][j];
}
}
Search(2);
cout<<MinStep<<endl;
for(int j=1;j<=MinStep;j++){
cout<<AS[j][0]<<" "<&